/*
 * RegelController.java  
 *
 * Creator:
 * 18.03.14 08:51 tanner
 *
 * Maintainer:
 * 18.03.14 08:51 tanner
 *
 * Last Modification:
 * $Id: $
 *
 * Copyright (c) 2003 ABACUS Research AG, All Rights Reserved
 */

public class RegelController {
    SpielFunktionen mSpielFunktionen;

    public RegelController(SpielFunktionen spielFunktionen) {
        mSpielFunktionen = spielFunktionen;
    }

    public void schwarzIstDran(SpielFunktionen.Zustand zustandZiel, int selectedZeile, int selectedSpalte, int destZeile, int destSpalte) {
        if (zustandZiel.equals(SpielFunktionen.Zustand.BRAUN)) {
            if (selectedZeile - destZeile == 1 && selectedSpalte - destSpalte == 1 || selectedSpalte - destSpalte == -1) {
                mSpielFunktionen.springeDiagonalSchwarz(destZeile, destSpalte, selectedZeile, selectedSpalte);
            } else {
                boolean isRestTwo = selectedSpalte - destSpalte == 2;
                boolean isRestMinusTwo = selectedSpalte - destSpalte == -2;
                if (selectedZeile - destZeile == 2 && isRestTwo) {
                    if (mSpielFunktionen.getZustand(destZeile + 1, destSpalte + 1).equals(SpielFunktionen.Zustand.ROT)) {
                        mSpielFunktionen.ueberspringeRot(destZeile, destSpalte, selectedZeile, selectedSpalte, true);
                        mSpielFunktionen.setFieldIsSelected(false);
                    }
                    //todo: kann weiter fressen falls noch m?glichkeiten vorhanden
                } else if (selectedZeile - destZeile == 2 && isRestMinusTwo) {
                    if (mSpielFunktionen.getZustand(destZeile + 1, destSpalte - 1).equals(SpielFunktionen.Zustand.ROT)) {
                        mSpielFunktionen.ueberspringeRot(destZeile, destSpalte, selectedZeile, selectedSpalte, false);
                        mSpielFunktionen.setFieldIsSelected(false);
                    }
                }
            }
        } else if (zustandZiel.equals(SpielFunktionen.Zustand.SCHWARZSELECTED)) {
            if (selectedZeile - destZeile == 0 && selectedSpalte - destSpalte == 0) {
                deSelect(selectedZeile, selectedSpalte, SpielFunktionen.Zustand.SCHWARZ);
            }
        }
    }

    public void rotIstDran(SpielFunktionen.Zustand zustandZiel, int selectedZeile, int selectedSpalte, int destZeile, int destSpalte) {
        if (zustandZiel.equals(SpielFunktionen.Zustand.BRAUN)) {
            if (destZeile - selectedZeile == 1 && destSpalte - selectedSpalte == 1 || destSpalte - selectedSpalte == -1) {
                mSpielFunktionen.springeDiagonalRot(destZeile, destSpalte, selectedZeile, selectedSpalte);
            } else {
                boolean isRestTwo = destSpalte - selectedSpalte == 2;
                boolean isRestMinusTwo = destSpalte - selectedSpalte == -2;
                if (destZeile - selectedZeile == 2 && isRestTwo) {
                    if (mSpielFunktionen.getZustand(destZeile - 1, destSpalte - 1).equals(SpielFunktionen.Zustand.SCHWARZ)) {
                        mSpielFunktionen.ueberspringeSchwarz(destZeile, destSpalte, selectedZeile, selectedSpalte, false);
                        mSpielFunktionen.setFieldIsSelected(false);
                    }
                } else if (destZeile - selectedZeile == 2 && isRestMinusTwo) {
                    if (mSpielFunktionen.getZustand(destZeile - 1, destSpalte + 1).equals(SpielFunktionen.Zustand.SCHWARZ)) {
                        mSpielFunktionen.ueberspringeSchwarz(destZeile, destSpalte, selectedZeile, selectedSpalte, true);
                        mSpielFunktionen.setFieldIsSelected(false);
                    }
                }
            }
        } else if (zustandZiel.equals(SpielFunktionen.Zustand.ROTSELECTED)) {
            if (selectedZeile - destZeile == 0 && selectedSpalte - destSpalte == 0) {
                deSelect(selectedZeile, selectedSpalte, SpielFunktionen.Zustand.ROT);
            }
        }
    }

    private void deSelect(int selectedZeile, int selectedSpalte, SpielFunktionen.Zustand zustand) {
        mSpielFunktionen.deselectField(selectedZeile, selectedSpalte, zustand);
        mSpielFunktionen.setFieldIsSelected(false);
    }
}
